第3节 运算符和数据类型转换
(一) if else 语句
if else用来表示中文里的 如果..., 就...., 否则.....
// 条件为true, 执行if后面的括号代码, 否则执行 else 后面括号代码
if(条件) {
// todo
}else{
// todo
}
// 多重判断
if(){
} else if() {
} else {
}
具体例子
<script>
var a = 100;
var b = 20;
debugger;
if (a > b) {
console.log('a 大于 b');
} else {
console.log('a 小于 b');
}
</script>
<!-- 多重判断 -->
<script>
var gender = prompt('请输入性别');
if (gender === '男') {
alert('你是个男的');
} else if(gender === '女') {
alert('你是个妹子');
} else {
alert('性别未知');
}
</script>
(二) 类型转换
问题: 以下代码会打印什么
<script>
var a = 'aa';
var b = 'bb';
if (a+b) {
console.log('xxxxxxx');
} else {
console.log('yyyyyyyy');
}
</script>
(1) 显式转换
- Number(变量名) 将其它类型转为数字
- String(变量名); 转字符串 // 另一种转换方式: 变量名+""
- Boolean(变量名); // 另一种转换方式 !!变量名
<script>
var str = '123';
// 转换为数字
var num = Number(str);
console.log(num);
console.log(typeof num);
// 结果为NaN
var str2 = 'abcd';
var num2 = Number(str2);
console.log(num2);
var str3 = '';
var num3 = Number(str3);
console.log(num3);
</script>
(2) 隐式转换
<script>
var a = 'aa';
var b = 'bb';
// a+b => aabb aabb会自动转换为true, 所以执行结果为 xxxxxx
if (a+b) {
console.log('xxxxxxx');
} else {
console.log('yyyyyyyy');
}
</script>
(3) 数据类型转换规则
【腾讯文档】类型转换规则 https://docs.qq.com/mind/DV21sVWRSUHJvUkZX
01 其他类型转数字类型规则
<script>
var boo1 = true;
var boo2 = false;
console.log('布尔true',Number(boo1));
console.log('布尔false',Number(boo2));
var str = '';
var str1 = ' ';
var str2 = '123';
var str3 = 'abcd123';
console.log('空字符串',Number(str));
console.log('空字符串',Number(str1));
console.log('数字字符串',Number(str2));
console.log('非数字字符串',Number(str3));
var uu;
console.log('undefined',Number(uu));
var obj = null;
console.log('null',Number(null));
var obj1 = {};
var obj2 = {a:2,b:3};
console.log('空对象',Number(obj1));
console.log('非空对象',Number(obj2));
</script>
02 其他类型转布尔规则
- Boolean(变量名)
- !!变量
<script>
var num1 = 100;
var num2 = NaN;
var num3 = 0;
var num4 = Infinity;
var num5 = 88.88;
console.log('整数',!!num1);
console.log('NaN',!!num2);
console.log('0',!!num3);
console.log('无穷大',!!num4);
console.log('小数',!!num5);
var str = '';
var str1 = ' ';
var str2 = 'abcd';
console.log('空字符串',!!str);
console.log('空字符串多个空格',!!str1);
console.log('非空字符串',!!str2);
var uu;
var nu = null;
console.log('undefined',!!uu);
console.log('null',!!nu);
var obj = {};
console.log('object',!!obj);
</script>
03 其他类型转字符串规则
- String(变量名);
- 变量名 + ""
- 规律: 一般情况下, 其他类型转字符串都是直接给原来的变量加上双引号即可
var num = 100;
console.log("数字",num+'');
(三) 运算符
【腾讯文档】js运算符思维导图 https://docs.qq.com/mind/DV0NCdHpCZmJVRGxX
(1) 算术运算
+ - * / %
- 相加的时候, 有一个数为字符串, 则+表示字符串拼接
<script>
var a = 20;
var b = 7;
var num1 = a+b;
var num2 = a-b;
var num3 = a*b;
var num4 = a/b;
// 计算余数
var num5 = a % b;
console.log(num1);
console.log(num2);
console.log(num3);
console.log(num4);
console.log(num5);
</script>
<script>
// 有一个数为字符串, 则+表示字符串拼接
var a = 100;
var b = prompt('请输入数字');
console.log(typeof b);
console.log(a+Number(b));
</script>
(2) 关系运算符(比较运算符)
var a = 10;
var b = '10';
console.log(a == b); // true,类型不同, 先转换成相同类型
console.log(a === b); // false, 类型不同为false, 类型相同再判断值是否相同
(3) 逻辑运算符
逻辑非!, 取反即可
var boo1 = false; // !boo1 => true !!bool var num = 100; // !num => false var str = ''; // !str => true var obj = null; // !obj => true var username; // !username => true // 如果str为空, 则打印111,否则打印222 var str = ''; if(str === '') { console.log(111); } else { console.log(222); } // 以上写法,可以换成下面的写法 if (!str) { console.log(111); } else { console.log(222); } var num = 100; if (num) { console.log(111); } else { console.log(222); } // 以上写法, 一般会写成 if(!!num) { console.log(111); } else { console.log(222); }
逻辑与&&: 中文里并且的意思
规律: 前者为true取后者, 否则取前者
当都是布尔的时候, 只有当两者都为true时结果为true, 否则为false
// 计算以下式子的值(参与运算的都是布尔类型)
true && true =>
true && false =>
false && true =>
false && false =>
// 计算以下式子的值(参与运算的是其他类型)
var num1 = 100;
var num2 = 0;
num1 && num2 => 100
num2 && num1 => 0
var a = 'web';
var b;
a && c => // 报错,计算的结果为c, 而c没有声明
b && c =>
逻辑或|| : 中文里的或者的意思
规律: 前者为true取前者, 否则取后者
当都是布尔的时候, 只要有一个为true, 结果皆为true, 否则为false
<script>
console.log(true || true ); // true
console.log(true || false ); // true
console.log(false || true ); // true
console.log(false || false ); // false
var num1 = 100;
var num2 = 0;
console.log(num1 || num2 ); // 100
console.log(num2 || num1 ); // 100
var a = 'web';
var b;
console.log(a || c ); // web
console.log(b || c ); // 报错,计算的结果为c, 而c没有声明
</script>
(4) 一元运算符
- i++ i先运算, 运算结束后i自加1
- ++i i先自己加1, 再跟其它数相加
<!-- ++ 自加 -->
<script>
var i = 10;
var j = 20;
var i2 = 10 + i++; // i先运算在自加1
console.log('i2',i2); // 20
console.log('i',i); // 11
var j2 = 10 + ++j; // j先自加1再运算
console.log('j2',j2); // 31
console.log('j',j); // 21
</script>
自减运算, 道理类似自加运算
<script>
var i = 10;
var j = 20;
var i2 = 10 + i--; // i先运算在自减1
console.log('i2',i2); // 20
console.log('i',i); // 9
var j2 = 10 + --j; // j先自减1再运算
console.log('j2',j2); // 29
console.log('j',j); // 19
</script>
练习:
<!-- 练习1 -->
<script>
var i = 10;
var i2 = 10 + i++; // i=10 i2=20
var i3 = 10+ ++i; // i=12 i3=22
var i4 = 10 + i--; // i=12 i4=22
var i5 = 10 + --i; // i =10 i5=20
// 求i,i2,i3,i4,i5的值
console.log(i,i2,i3,i4,i5);
var count = 60; // 说出控制台打印的值
console.log(--count); // 59
console.log(--count); // 58
console.log(--count);
console.log(--count);
console.log(--count);
</script>
<!-- 练习2 -->
<script>
var i = 1;
var j = 1;
var a = 10;
// 11 10+ 1
var b = a + i++;
// 11+ 3 + 3 + 2
var c = b + ++i + i++ + ++j;
var d = a + b + c;
// i=4 j=2 a=10,b=11, c=19 d=40
console.log(i,j,a,b,c,d);
</script>
(5) 复合赋值运算符
<script>
var a = 10;
a += 10;
console.log(a); // 20
a -= 10;
console.log(a); // 10
a *= 10;
console.log(a); // 100
a /= 10;
console.log(a); // 10
a %= 10;
console.log(a); // 0
</script>
(6) 运算符优先级
() > 自加(自减) > 算术 > 关系 > 逻辑 > 赋值
(四) 作业
(1) 编程题
- 编程题:
有以下两个变量 num1 和 num2,若两个变量相加等于 15.3,则输出'运算正确',否则输出'运算错误'
var num1 = 7.1;
var num2 = 8.2;
答:
编程题, 运算并打印结果 有一篮苹果,两个两个的拿剩一个,三个三个的拿剩一个,四个四个的拿剩一个,五个五个的拿剩一个,六个六个的拿剩一个,七个七个的拿,能拿完,请问这篮子里有多少个苹果?
写出下面式子的值
typeof 100
typeof true
typeof(undefined)
typeof({})
typeof( [1,2] )
typeof(NaN)
typeof(null)
- 编程题: 多重判断 作业要求: 在屏幕输入一个数字,确定后弹出相应的年龄段
年龄划分:
“0-6岁为婴幼儿;
7-12岁为少儿;
13-17岁为青少年;
18-45岁为青壮年;
46-69岁为中年;
69岁以上为老年
- 实现下面效果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p>
显示一个弹框, 用户输入输入大于20或者小于10的数字就弹出'你猜对了', 否则弹出'你猜错了'
</p>
</body>
</html>
实现类似购物车的编辑效果 购物车地址: http://fresh.huruqing.cn/cart
<!DOCTYPE html> <html lang="en"> <head> <title>Document</title> <style> .dsn { display: none; } </style> </head> <body> <button id="btn1" onclick="clickFn()">编辑</button> <div> <span id="num">x1</span> <div id="num2" class="dsn"> <button>+</button> <span>1</span> <button>-</button> </div> </div> <button id="count">结算</button> </body> </html>
(2) 运算符作业
1. 计算以下式子的值(先口算, 再验证)
1. var num1 = 0;
!num1;
2. var num2 = 100;
!num2;
!!num2;
3. var num3 = NaN;
!num3;
4. var str1 = '';
!str1;
5. var str2 = 'abc';
!str2;
10. 0 && 100;
11. 0 && NaN;
12. 100 && 0;
13. 100 && NaN;
14. NaN && 0;
15. NaN && 100;
16. '' && 'abc';
17. 'abc' && '';
18. 'abc' && '456';
19. true && true;
20. true && false;
21. false && true;
22. false && false;
23. 0 && undefined;
24. NaN && null;
25. 100 && 'abc';
6. var boo1 = true;
!boo1;
7. var boo2 = false;
!boo2;
8. var name;
!name;
9. var cat = null;
!cat;
var obj;
27. 'abc' && obj.name;
28. undefined && obj.name;
29. obj && obj.name;
30. 0 || 100;
31. 0 || NaN;
32. 100 || 0;
33. 100 || NaN;
34. NaN || 0;
35. NaN || 100;
36. '' || 'abc';
37. 'abc' || '';
38. 'abc' || '456';
39. true || true;
40. true || false;
41. false || true;
42. false || false;
43. 0 || undefined;
44. NaN || null;
45. 100 || 'abc';
46. 'abc' || undefined
47. var obj; 'abc' || obj.name;
48. undefined || obj.name;
'1.23' == 1.23
0 == false
null == undefined
NaN == NaN
1 == '1'
1 === '1'
1 + '2' === '1' + 2
1 + true === false + 2
1 + null == undefined + 1
'a' - 'b' == 'b' - 'a' false
4 == '4.00'
4 === '4.00'
0 == false
0 == null
null == false
加减作业题
var score = 50;
var grade = '7';
score + 10;
score + '10';
score + null;
score + undefined;
score + NaN;
score + 10;
score + '10';
score + null;
var num1 = 8;
var num2 = '8';
num1 - num2;
num1 - 'web01';
num1 - null;
num1 - undefined;
num1 - true;
num1 - false;
num1 - num2;
2. 计算以下式子的值, 写出解题步骤
<script>
// () > 自加(自减) > 算术 > 关系 > 逻辑 > 赋值
var i = 1;
var j = 1;
var sum = 20 + i++ + 'abc' && 123 - ++i + ++j + ++j + '123' == 123 * 2/4;
</script>
3. 自学for循环
完成上面的编程题
运算并在网页上打印结果 有一篮苹果,两个两个的拿剩一个,三个三个的拿剩一个,四个四个的拿剩一个,五个五个的拿剩一个,六个六个的拿剩一个,七个七个的拿,能拿完,请问这篮子里有多少个苹果?
使用for循环计算1~100相加结果